package com.foodapp.back.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.foodapp.back.dto.OrderCreateDTO;
import com.foodapp.back.entity.Order;
import com.foodapp.back.vo.OrderVO;

/**
 * 订单服务接口
 */
public interface OrderService extends IService<Order> {

    /**
     * 创建订单
     *
     * @param userId        用户ID
     * @param orderCreateDTO 订单创建DTO
     * @return 订单ID
     */
    Long createOrder(Long userId, OrderCreateDTO orderCreateDTO);

    /**
     * 分页查询用户订单列表
     *
     * @param userId 用户ID
     * @param page   页码
     * @param size   每页大小
     * @param status 订单状态
     * @return 订单列表
     */
    Page<OrderVO> getUserOrderList(Long userId, Integer page, Integer size, Integer status);

    /**
     * 获取订单详情
     *
     * @param id 订单ID
     * @return 订单详情
     */
    OrderVO getOrderDetail(Long id);

    /**
     * 取消订单
     *
     * @param userId  用户ID
     * @param orderId 订单ID
     * @return 是否成功
     */
    boolean cancelOrder(Long userId, Long orderId);

    /**
     * 支付订单
     *
     * @param userId  用户ID
     * @param orderId 订单ID
     * @return 是否成功
     */
    boolean payOrder(Long userId, Long orderId);

    /**
     * 更新订单状态
     *
     * @param orderId 订单ID
     * @param status  状态
     * @return 是否成功
     */
    boolean updateOrderStatus(Long orderId, Integer status);

    /**
     * 分页查询所有订单（管理员）
     *
     * @param page          页码
     * @param size          每页大小
     * @param restaurantId  餐厅ID
     * @param status        订单状态
     * @param orderNo       订单号
     * @return 订单列表
     */
    Page<OrderVO> getAdminOrderList(Integer page, Integer size, Long restaurantId, Integer status, String orderNo);
}
